<?php

/**
 * Classe d'abstraction de manipulation des résultats
 */
class Result {

    // ATTRIBUTS
    // résultat d'une requête
    // TODO Passer en private après voir fait des tests
    var $statement;
    private $errors = array();
    private $errorFound = false;

    // CONSTRUCTEUR

    /**
     * Classe d'abstraction de resultat d'une requête MySQL
     * 
     * Constructeur
     * 
     * @param	result	resultat d'une requete mysql executée avec la fonction mysql_query()
     */
    function __construct($statement) {
        if (is_object($statement) && get_class($statement)=='PDOStatement') {
            $this->errors = $statement->errorInfo();
            $this->errorFound = (isset($this->errors[0]) && filter_var($this->errors[0], FILTER_VALIDATE_INT) != 0);
            $this->statement = $statement;
        }else{
            Throw new Exception(__CLASS__.' contructor error($statement unavailable)');
        }
    }

    // METHODES PUBLIQUES
    
    /**
     *  Indique si une erreur a été trouvé dans l'execution de la requete
     */
    public function errorFound(){
        return $this->errorFound;
    }
    
    /**
     *  Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé
     */
    public function Fetch($fetch_style = PDO::FETCH_ASSOC) {
        if($this->errorFound()){
            return false;
        }
        return $this->statement->fetch($fetch_style);
    }

    /**
     *  Retourne toutes les lignes de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé
     */
    public function fetchAll($fetch_style = PDO::FETCH_ASSOC) {
        if($this->errorFound()){
            return false;
        }
        return $this->statement->fetchAll($fetch_style);
    }

    /**
     * Renvoit le nombre de résultats
     *
     * @return integer nombre de resultats
     */
    public function Count() {
        if($this->errorFound()){
            return false;
        }
        return $this->statement->rowCount();
    }
    
    public function LastId(){
        if($this->errorFound()){
            return false;
        }
        return $this->statement->lastInsertId();
    }

}
